#include <stdio.h>
#include <stdlib.h>

struct Date
{
    int year;
    int month;
    int day;
};

struct Book
{
    char title[128];
    char author[40];
    float price;
    struct Date date;
    char publisher;
};

void getInput(struct Book *book);
void printBook(struct Book *book);

void getInput(struct Book *book)
{
    printf("请输入书名:");
    scanf("%s", book->title);
    printf("请输入作者:");
    scanf("%s", book->author);
    printf("请输入售价:");
    scanf("%f", &book->price);
    printf("请输入出版日期:");
    scanf("%d-%d-%d", &book->date.year, &book->date.month,
            &book->date.day);
    printf("请输入出版社:");
    scanf("%s", &book->publisher);
}

void printBook(struct Book *book)
{
    printf("书名:%s\n", book->title);
    printf("作者:%s\n", book->author);
    printf("售价:%.2f\n", book->price);
    printf("日期:%d-%d-%d\n", book->date.year, book->date.month, book->date.day);
    printf("出版社:%s\n", &book->publisher);
}

int main(void)
{
    struct Book *b1, *b2;//此时空

    b1 = (struct Book *)malloc(sizeof(struct Book));
    b2 = (struct Book *)malloc(sizeof(struct Book));//前面的是强制转换为Book类型指针
    if (b1 == NULL || b2 == NULL)
    {
        printf("内存分配失败!\n");
        exit(1);
    }

    printf("请输入第一本书的信息...:\n");
    getInput(b1);
    putchar('\n');
    printf("请输入第二本书的信息...:\n");
    getInput(b2);
    putchar('\n');

    printf("\n\n录入完毕, 现在开始打印验证...\n\n");

    printf("打印第一本书的信息...\n");
    printBook(b1);
    putchar('\n');
    printf("打印第二本书的信息...\n");
    printBook(b2);
    putchar('\n');

    free(b1);
    free(b2);

    return 0;
}
